//用数组实现队列（普通队列只能从后面插入，循环队列可以利用自身特点（圈），绕过去前面的也可以插入
public class MyCircularQueue {
    public int[]elem;
    public int first;
    public int last;
    public MyCircularQueue(int k){
        elem=new int[k+1];//把最后一个空间浪费了
    }
    public  boolean enQueue(int value){
        if (isFull()){
            return false;
        }
        elem[last]=value;
        last=(last+1)%elem.length;
        return  true;
    }
    public int Front(){//获取对头元素
if (isEmpty()){
    return -1;
}return elem[first];
    }
    public int Rear(){//获取队尾元素
        if (isEmpty()){
            return -1;

        }
        int index=(last==0)?elem.length-1:last-1;//只有0位置特殊
        return  elem[index];
    }
    public boolean deQueue(){
        if (isEmpty()){
            return false;
        }
        first=(first+1)%elem.length;//是逻辑上的删除，物理上没有完全的删除
        return true;
    }
    public boolean isFull(){
        return (last+1)%elem.length==first;//判断是否满了
    }
    public boolean isEmpty(){
        return first==last;
    }
}
